{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2207c56f-11b3-4f07-b815-1ab66c3d8b23",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Py3_Jupyter_Nb_Pandas(金融MACD指标分析)_GF_2024-01-16.ipynb\n",
    "# Create By GF 2024-01-16 12:09"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b2874876",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd # -> Pandas Version 1.4.1\n",
    "import matplotlib.pyplot as plt # -> Matplotlib Version 3.6.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "346e636a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Matplotlib 相关配置\n",
    "# ##################################################\n",
    "plt.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n",
    "plt.rcParams[\"axes.unicode_minus\"] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a6e0a494",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 全局变量(Global Variable)\n",
    "# ##################################################\n",
    "EMA_List:list = []\n",
    "MACD_DEA_List:list = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "b4345811",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Map 函数 - 金融指标(Finance Indicator) - 指数移动平均(Exponential Moving Average).\n",
    "def MapFunc_FinInd_EMA(Index:int, Period:int, Close:float) -> float:\n",
    "    \n",
    "    # ########## 首日EMA直接使用当日收盘价 ###########\n",
    "    # ----------------------------------------------\n",
    "    # 公式：EMA = 当日收盘价 x 2/(N+1) + 前一日EMA x (N-1)/(N+1)\n",
    "    # ----------------------------------------------\n",
    "    # 以计算12日EMA举例：\n",
    "    # 其中\"i\"代表当日日期。\n",
    "    # EMA12 = 2/(12+1) * Close[i] + (12+1-2)/(12+1) * EMA12[i-1]\n",
    "    # 首日EMA由于没有昨日EMA数据，所以首日EMA直接使用当日收盘价。\n",
    "    # ----------------------------------------------\n",
    "    global EMA_List # -> 通过 global 关键字来引用全局变量。\n",
    "    # ----------------------------------------------\n",
    "    if (Index == 1):\n",
    "        EMA_List.clear() # -> 首次执行函数先清空全局列表变量。\n",
    "        # ..........................................\n",
    "        EMA_List.append(Close)\n",
    "        # ..........................................\n",
    "        return Close\n",
    "    else:\n",
    "        Idx = (Index - 1) # -> 由于行号索引是从 1 开始，但 Python 列表索引是从 0 开始, 所以需要减去 1。\n",
    "        # ..........................................\n",
    "        EMA_Value = 2/(Period+1) * Close + (Period+1-2)/(Period+1) * EMA_List[Idx - 1]\n",
    "        # ..........................................\n",
    "        EMA_List.append(EMA_Value)\n",
    "        # ..........................................\n",
    "        return EMA_Value\n",
    "    # ##############################################\n",
    "    # End of Function.\n",
    "\n",
    "# Map 函数 - 金融指标(Finance Indicator) - 异同移动平均线 - DIF (Finance - Moving Average Convergence / Divergence - DIF).\n",
    "def MapFunc_FinInd_MACD_DIF(EMA12:float, EMA26:float) -> float:\n",
    "    \n",
    "    # 公式：MACD_DIF = 当日EMA(12) - 当日EMA(26)\n",
    "    # 12日EMA和26日EMA通常是MACD的常用值，如要修改MACD的观测参数，则修改对应的EMA数值。\n",
    "    # ----------------------------------------------\n",
    "    MACD_DIF_Value = EMA12 - EMA26\n",
    "    # ----------------------------------------------\n",
    "    return MACD_DIF_Value\n",
    "    # ##############################################\n",
    "    # End of Function.\n",
    "\n",
    "# Map 函数 - 金融指标(Finance Indicator) - 异同移动平均线 - DEA (Finance - Moving Average Convergence / Divergence - DEA).\n",
    "def MapFunc_FinInd_MACD_DEA(Index:int, MACD_DIF:float) -> float:\n",
    "    \n",
    "    # ############## 首日DEA直接使用0值 #############\n",
    "    # ----------------------------------------------\n",
    "    # DEA又叫：计算DIF的9日EMA。\n",
    "    # 根据离差值计算其9日的EMA，即离差平均值，是所求的MACD值。为了不与指标原名相混淆，此值又名DEA。\n",
    "    # 公式：当日DEA = 2/(9+1) * 当日DIF + (9+1-2)/(9+1) * 前日DEA\n",
    "    # 首日DEA由于没有昨日DEA数据，所以首日DEA直接使用0值。\n",
    "    # ----------------------------------------------\n",
    "    global MACD_DEA_List # -> 通过 global 关键字来引用全局变量。\n",
    "    # ----------------------------------------------\n",
    "    if (Index == 1):\n",
    "        MACD_DEA_List.clear() # -> 首次执行函数先清空全局列表变量。\n",
    "        # ..........................................\n",
    "        MACD_DEA_List.append(0.0)\n",
    "        # ..........................................\n",
    "        return 0.0\n",
    "    else:\n",
    "        Idx = (Index - 1) # -> 由于行号索引是从 1 开始，但 Python 列表索引是从 0 开始, 所以需要减去 1。\n",
    "        # ..........................................\n",
    "        MACD_DEA_Value = 2/(9+1) * MACD_DIF + (9+1-2)/(9+1) * MACD_DEA_List[Idx - 1]\n",
    "        # ..........................................\n",
    "        MACD_DEA_List.append(MACD_DEA_Value)\n",
    "        # ..........................................\n",
    "        return MACD_DEA_Value\n",
    "    # ##############################################\n",
    "    # End of Function.\n",
    "\n",
    "# Map 函数 - 金融指标(Finance Indicator) - 异同移动平均线 - STICK (Finance - Moving Average Convergence / Divergence - STICK).\n",
    "def MapFunc_FinInd_MACD_STICK(MACD_DIF:float, MACD_DEA:float) -> float:\n",
    "    \n",
    "    # 用 (DIF - DEA ) x 2 即为MACD柱状图，一般称作MACD或STICK。\n",
    "    # 公式：MACD_STICK(MACD) = (MACD_DIF - MACD_DEA) * 2\n",
    "    # ----------------------------------------------\n",
    "    MACD_STICK_Value = (MACD_DIF - MACD_DEA) * 2\n",
    "    # ----------------------------------------------\n",
    "    return MACD_STICK_Value\n",
    "    # ##############################################\n",
    "    # End of Function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5ce7f534",
   "metadata": {},
   "outputs": [],
   "source": [
    "StkPDF = pd.read_csv(\"./Datas/Stock.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "308c64fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Code</th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Pre_Close</th>\n",
       "      <th>Change</th>\n",
       "      <th>Chg_Pct</th>\n",
       "      <th>Turnover</th>\n",
       "      <th>Volume</th>\n",
       "      <th>Amount</th>\n",
       "      <th>Total</th>\n",
       "      <th>Circle</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-12-31</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.95</td>\n",
       "      <td>7.76</td>\n",
       "      <td>7.77</td>\n",
       "      <td>7.93</td>\n",
       "      <td>-0.16</td>\n",
       "      <td>-0.020177</td>\n",
       "      <td>0.015498</td>\n",
       "      <td>13915200</td>\n",
       "      <td>109318000</td>\n",
       "      <td>6976420000</td>\n",
       "      <td>6976420000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-12-30</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.86</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.75</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.84</td>\n",
       "      <td>0.09</td>\n",
       "      <td>0.011480</td>\n",
       "      <td>0.018662</td>\n",
       "      <td>16755900</td>\n",
       "      <td>131567000</td>\n",
       "      <td>7120080000</td>\n",
       "      <td>7120080000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-12-29</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.72</td>\n",
       "      <td>7.85</td>\n",
       "      <td>7.69</td>\n",
       "      <td>7.84</td>\n",
       "      <td>7.71</td>\n",
       "      <td>0.13</td>\n",
       "      <td>0.016861</td>\n",
       "      <td>0.015886</td>\n",
       "      <td>14263800</td>\n",
       "      <td>110789000</td>\n",
       "      <td>7039280000</td>\n",
       "      <td>7039280000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-12-28</td>\n",
       "      <td>'000422</td>\n",
       "      <td>8.03</td>\n",
       "      <td>8.08</td>\n",
       "      <td>7.70</td>\n",
       "      <td>7.71</td>\n",
       "      <td>8.03</td>\n",
       "      <td>-0.32</td>\n",
       "      <td>-0.039851</td>\n",
       "      <td>0.030821</td>\n",
       "      <td>27672800</td>\n",
       "      <td>218869000</td>\n",
       "      <td>6922550000</td>\n",
       "      <td>6922550000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-12-25</td>\n",
       "      <td>'000422</td>\n",
       "      <td>8.03</td>\n",
       "      <td>8.05</td>\n",
       "      <td>7.93</td>\n",
       "      <td>8.03</td>\n",
       "      <td>7.99</td>\n",
       "      <td>0.04</td>\n",
       "      <td>0.005006</td>\n",
       "      <td>0.021132</td>\n",
       "      <td>18974000</td>\n",
       "      <td>151673000</td>\n",
       "      <td>7209870000</td>\n",
       "      <td>7209870000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2647</th>\n",
       "      <td>2005-02-04</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.75</td>\n",
       "      <td>7.05</td>\n",
       "      <td>6.71</td>\n",
       "      <td>7.00</td>\n",
       "      <td>6.75</td>\n",
       "      <td>0.25</td>\n",
       "      <td>0.037037</td>\n",
       "      <td>0.017178</td>\n",
       "      <td>2430800</td>\n",
       "      <td>16818500</td>\n",
       "      <td>1725750000</td>\n",
       "      <td>990538000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2648</th>\n",
       "      <td>2005-02-03</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.00</td>\n",
       "      <td>7.15</td>\n",
       "      <td>6.73</td>\n",
       "      <td>6.75</td>\n",
       "      <td>6.90</td>\n",
       "      <td>-0.15</td>\n",
       "      <td>-0.021739</td>\n",
       "      <td>0.028556</td>\n",
       "      <td>4040880</td>\n",
       "      <td>28086200</td>\n",
       "      <td>1664110000</td>\n",
       "      <td>955162000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2649</th>\n",
       "      <td>2005-02-02</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.99</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.90</td>\n",
       "      <td>6.42</td>\n",
       "      <td>0.48</td>\n",
       "      <td>0.074766</td>\n",
       "      <td>0.032928</td>\n",
       "      <td>4659550</td>\n",
       "      <td>31345900</td>\n",
       "      <td>1701090000</td>\n",
       "      <td>976388000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2650</th>\n",
       "      <td>2005-02-01</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.78</td>\n",
       "      <td>6.89</td>\n",
       "      <td>6.30</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.81</td>\n",
       "      <td>-0.39</td>\n",
       "      <td>-0.057269</td>\n",
       "      <td>0.027348</td>\n",
       "      <td>3869880</td>\n",
       "      <td>25333700</td>\n",
       "      <td>1582760000</td>\n",
       "      <td>908465000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2651</th>\n",
       "      <td>2005-01-31</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.78</td>\n",
       "      <td>6.87</td>\n",
       "      <td>6.70</td>\n",
       "      <td>6.81</td>\n",
       "      <td>6.94</td>\n",
       "      <td>-0.13</td>\n",
       "      <td>-0.018732</td>\n",
       "      <td>0.018862</td>\n",
       "      <td>2669130</td>\n",
       "      <td>18135800</td>\n",
       "      <td>1678910000</td>\n",
       "      <td>963652000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2652 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date     Code  Open  High   Low  Close  Pre_Close  Change  \\\n",
       "0    2015-12-31  '000422  7.93  7.95  7.76   7.77       7.93   -0.16   \n",
       "1    2015-12-30  '000422  7.86  7.93  7.75   7.93       7.84    0.09   \n",
       "2    2015-12-29  '000422  7.72  7.85  7.69   7.84       7.71    0.13   \n",
       "3    2015-12-28  '000422  8.03  8.08  7.70   7.71       8.03   -0.32   \n",
       "4    2015-12-25  '000422  8.03  8.05  7.93   8.03       7.99    0.04   \n",
       "...         ...      ...   ...   ...   ...    ...        ...     ...   \n",
       "2647 2005-02-04  '000422  6.75  7.05  6.71   7.00       6.75    0.25   \n",
       "2648 2005-02-03  '000422  7.00  7.15  6.73   6.75       6.90   -0.15   \n",
       "2649 2005-02-02  '000422  6.42  6.99  6.42   6.90       6.42    0.48   \n",
       "2650 2005-02-01  '000422  6.78  6.89  6.30   6.42       6.81   -0.39   \n",
       "2651 2005-01-31  '000422  6.78  6.87  6.70   6.81       6.94   -0.13   \n",
       "\n",
       "       Chg_Pct  Turnover    Volume     Amount       Total      Circle  \n",
       "0    -0.020177  0.015498  13915200  109318000  6976420000  6976420000  \n",
       "1     0.011480  0.018662  16755900  131567000  7120080000  7120080000  \n",
       "2     0.016861  0.015886  14263800  110789000  7039280000  7039280000  \n",
       "3    -0.039851  0.030821  27672800  218869000  6922550000  6922550000  \n",
       "4     0.005006  0.021132  18974000  151673000  7209870000  7209870000  \n",
       "...        ...       ...       ...        ...         ...         ...  \n",
       "2647  0.037037  0.017178   2430800   16818500  1725750000   990538000  \n",
       "2648 -0.021739  0.028556   4040880   28086200  1664110000   955162000  \n",
       "2649  0.074766  0.032928   4659550   31345900  1701090000   976388000  \n",
       "2650 -0.057269  0.027348   3869880   25333700  1582760000   908465000  \n",
       "2651 -0.018732  0.018862   2669130   18135800  1678910000   963652000  \n",
       "\n",
       "[2652 rows x 14 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 转换类型: 初次读取后转换。\n",
    "# ##################################################\n",
    "StkPDF[\"Date\"] = StkPDF[\"Date\"].astype(\"datetime64[ns]\")\n",
    "\n",
    "# ##################################################\n",
    "StkPDF"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a4945783",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Code</th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Pre_Close</th>\n",
       "      <th>Change</th>\n",
       "      <th>Chg_Pct</th>\n",
       "      <th>Turnover</th>\n",
       "      <th>Volume</th>\n",
       "      <th>Amount</th>\n",
       "      <th>Total</th>\n",
       "      <th>Circle</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-12-31</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.95</td>\n",
       "      <td>7.76</td>\n",
       "      <td>7.77</td>\n",
       "      <td>7.93</td>\n",
       "      <td>-0.16</td>\n",
       "      <td>-0.020177</td>\n",
       "      <td>0.015498</td>\n",
       "      <td>13915200</td>\n",
       "      <td>109318000</td>\n",
       "      <td>6976420000</td>\n",
       "      <td>6976420000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-12-30</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.86</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.75</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.84</td>\n",
       "      <td>0.09</td>\n",
       "      <td>0.011480</td>\n",
       "      <td>0.018662</td>\n",
       "      <td>16755900</td>\n",
       "      <td>131567000</td>\n",
       "      <td>7120080000</td>\n",
       "      <td>7120080000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-12-29</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.72</td>\n",
       "      <td>7.85</td>\n",
       "      <td>7.69</td>\n",
       "      <td>7.84</td>\n",
       "      <td>7.71</td>\n",
       "      <td>0.13</td>\n",
       "      <td>0.016861</td>\n",
       "      <td>0.015886</td>\n",
       "      <td>14263800</td>\n",
       "      <td>110789000</td>\n",
       "      <td>7039280000</td>\n",
       "      <td>7039280000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-12-28</td>\n",
       "      <td>'000422</td>\n",
       "      <td>8.03</td>\n",
       "      <td>8.08</td>\n",
       "      <td>7.70</td>\n",
       "      <td>7.71</td>\n",
       "      <td>8.03</td>\n",
       "      <td>-0.32</td>\n",
       "      <td>-0.039851</td>\n",
       "      <td>0.030821</td>\n",
       "      <td>27672800</td>\n",
       "      <td>218869000</td>\n",
       "      <td>6922550000</td>\n",
       "      <td>6922550000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-12-25</td>\n",
       "      <td>'000422</td>\n",
       "      <td>8.03</td>\n",
       "      <td>8.05</td>\n",
       "      <td>7.93</td>\n",
       "      <td>8.03</td>\n",
       "      <td>7.99</td>\n",
       "      <td>0.04</td>\n",
       "      <td>0.005006</td>\n",
       "      <td>0.021132</td>\n",
       "      <td>18974000</td>\n",
       "      <td>151673000</td>\n",
       "      <td>7209870000</td>\n",
       "      <td>7209870000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2647</th>\n",
       "      <td>2005-02-04</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.75</td>\n",
       "      <td>7.05</td>\n",
       "      <td>6.71</td>\n",
       "      <td>7.00</td>\n",
       "      <td>6.75</td>\n",
       "      <td>0.25</td>\n",
       "      <td>0.037037</td>\n",
       "      <td>0.017178</td>\n",
       "      <td>2430800</td>\n",
       "      <td>16818500</td>\n",
       "      <td>1725750000</td>\n",
       "      <td>990538000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2648</th>\n",
       "      <td>2005-02-03</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.00</td>\n",
       "      <td>7.15</td>\n",
       "      <td>6.73</td>\n",
       "      <td>6.75</td>\n",
       "      <td>6.90</td>\n",
       "      <td>-0.15</td>\n",
       "      <td>-0.021739</td>\n",
       "      <td>0.028556</td>\n",
       "      <td>4040880</td>\n",
       "      <td>28086200</td>\n",
       "      <td>1664110000</td>\n",
       "      <td>955162000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2649</th>\n",
       "      <td>2005-02-02</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.99</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.90</td>\n",
       "      <td>6.42</td>\n",
       "      <td>0.48</td>\n",
       "      <td>0.074766</td>\n",
       "      <td>0.032928</td>\n",
       "      <td>4659550</td>\n",
       "      <td>31345900</td>\n",
       "      <td>1701090000</td>\n",
       "      <td>976388000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2650</th>\n",
       "      <td>2005-02-01</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.78</td>\n",
       "      <td>6.89</td>\n",
       "      <td>6.30</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.81</td>\n",
       "      <td>-0.39</td>\n",
       "      <td>-0.057269</td>\n",
       "      <td>0.027348</td>\n",
       "      <td>3869880</td>\n",
       "      <td>25333700</td>\n",
       "      <td>1582760000</td>\n",
       "      <td>908465000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2651</th>\n",
       "      <td>2005-01-31</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.78</td>\n",
       "      <td>6.87</td>\n",
       "      <td>6.70</td>\n",
       "      <td>6.81</td>\n",
       "      <td>6.94</td>\n",
       "      <td>-0.13</td>\n",
       "      <td>-0.018732</td>\n",
       "      <td>0.018862</td>\n",
       "      <td>2669130</td>\n",
       "      <td>18135800</td>\n",
       "      <td>1678910000</td>\n",
       "      <td>963652000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2567 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date     Code  Open  High   Low  Close  Pre_Close  Change  \\\n",
       "0    2015-12-31  '000422  7.93  7.95  7.76   7.77       7.93   -0.16   \n",
       "1    2015-12-30  '000422  7.86  7.93  7.75   7.93       7.84    0.09   \n",
       "2    2015-12-29  '000422  7.72  7.85  7.69   7.84       7.71    0.13   \n",
       "3    2015-12-28  '000422  8.03  8.08  7.70   7.71       8.03   -0.32   \n",
       "4    2015-12-25  '000422  8.03  8.05  7.93   8.03       7.99    0.04   \n",
       "...         ...      ...   ...   ...   ...    ...        ...     ...   \n",
       "2647 2005-02-04  '000422  6.75  7.05  6.71   7.00       6.75    0.25   \n",
       "2648 2005-02-03  '000422  7.00  7.15  6.73   6.75       6.90   -0.15   \n",
       "2649 2005-02-02  '000422  6.42  6.99  6.42   6.90       6.42    0.48   \n",
       "2650 2005-02-01  '000422  6.78  6.89  6.30   6.42       6.81   -0.39   \n",
       "2651 2005-01-31  '000422  6.78  6.87  6.70   6.81       6.94   -0.13   \n",
       "\n",
       "       Chg_Pct  Turnover    Volume     Amount       Total      Circle  \n",
       "0    -0.020177  0.015498  13915200  109318000  6976420000  6976420000  \n",
       "1     0.011480  0.018662  16755900  131567000  7120080000  7120080000  \n",
       "2     0.016861  0.015886  14263800  110789000  7039280000  7039280000  \n",
       "3    -0.039851  0.030821  27672800  218869000  6922550000  6922550000  \n",
       "4     0.005006  0.021132  18974000  151673000  7209870000  7209870000  \n",
       "...        ...       ...       ...        ...         ...         ...  \n",
       "2647  0.037037  0.017178   2430800   16818500  1725750000   990538000  \n",
       "2648 -0.021739  0.028556   4040880   28086200  1664110000   955162000  \n",
       "2649  0.074766  0.032928   4659550   31345900  1701090000   976388000  \n",
       "2650 -0.057269  0.027348   3869880   25333700  1582760000   908465000  \n",
       "2651 -0.018732  0.018862   2669130   18135800  1678910000   963652000  \n",
       "\n",
       "[2567 rows x 14 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 筛选数据: 筛选出成交量 (Volume) 不为 0.0 的数据。\n",
    "# ##################################################\n",
    "StkPDF = StkPDF[StkPDF[\"Volume\"] != 0.0]\n",
    "\n",
    "# ##################################################\n",
    "StkPDF"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "404a85e7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Code</th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Pre_Close</th>\n",
       "      <th>Change</th>\n",
       "      <th>Chg_Pct</th>\n",
       "      <th>Turnover</th>\n",
       "      <th>Volume</th>\n",
       "      <th>Amount</th>\n",
       "      <th>Total</th>\n",
       "      <th>Circle</th>\n",
       "      <th>Row_Num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-12-31</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.95</td>\n",
       "      <td>7.76</td>\n",
       "      <td>7.77</td>\n",
       "      <td>7.93</td>\n",
       "      <td>-0.16</td>\n",
       "      <td>-0.020177</td>\n",
       "      <td>0.015498</td>\n",
       "      <td>13915200</td>\n",
       "      <td>109318000</td>\n",
       "      <td>6976420000</td>\n",
       "      <td>6976420000</td>\n",
       "      <td>2567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-12-30</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.86</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.75</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.84</td>\n",
       "      <td>0.09</td>\n",
       "      <td>0.011480</td>\n",
       "      <td>0.018662</td>\n",
       "      <td>16755900</td>\n",
       "      <td>131567000</td>\n",
       "      <td>7120080000</td>\n",
       "      <td>7120080000</td>\n",
       "      <td>2566</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-12-29</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.72</td>\n",
       "      <td>7.85</td>\n",
       "      <td>7.69</td>\n",
       "      <td>7.84</td>\n",
       "      <td>7.71</td>\n",
       "      <td>0.13</td>\n",
       "      <td>0.016861</td>\n",
       "      <td>0.015886</td>\n",
       "      <td>14263800</td>\n",
       "      <td>110789000</td>\n",
       "      <td>7039280000</td>\n",
       "      <td>7039280000</td>\n",
       "      <td>2565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-12-28</td>\n",
       "      <td>'000422</td>\n",
       "      <td>8.03</td>\n",
       "      <td>8.08</td>\n",
       "      <td>7.70</td>\n",
       "      <td>7.71</td>\n",
       "      <td>8.03</td>\n",
       "      <td>-0.32</td>\n",
       "      <td>-0.039851</td>\n",
       "      <td>0.030821</td>\n",
       "      <td>27672800</td>\n",
       "      <td>218869000</td>\n",
       "      <td>6922550000</td>\n",
       "      <td>6922550000</td>\n",
       "      <td>2564</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-12-25</td>\n",
       "      <td>'000422</td>\n",
       "      <td>8.03</td>\n",
       "      <td>8.05</td>\n",
       "      <td>7.93</td>\n",
       "      <td>8.03</td>\n",
       "      <td>7.99</td>\n",
       "      <td>0.04</td>\n",
       "      <td>0.005006</td>\n",
       "      <td>0.021132</td>\n",
       "      <td>18974000</td>\n",
       "      <td>151673000</td>\n",
       "      <td>7209870000</td>\n",
       "      <td>7209870000</td>\n",
       "      <td>2563</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2647</th>\n",
       "      <td>2005-02-04</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.75</td>\n",
       "      <td>7.05</td>\n",
       "      <td>6.71</td>\n",
       "      <td>7.00</td>\n",
       "      <td>6.75</td>\n",
       "      <td>0.25</td>\n",
       "      <td>0.037037</td>\n",
       "      <td>0.017178</td>\n",
       "      <td>2430800</td>\n",
       "      <td>16818500</td>\n",
       "      <td>1725750000</td>\n",
       "      <td>990538000</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2648</th>\n",
       "      <td>2005-02-03</td>\n",
       "      <td>'000422</td>\n",
       "      <td>7.00</td>\n",
       "      <td>7.15</td>\n",
       "      <td>6.73</td>\n",
       "      <td>6.75</td>\n",
       "      <td>6.90</td>\n",
       "      <td>-0.15</td>\n",
       "      <td>-0.021739</td>\n",
       "      <td>0.028556</td>\n",
       "      <td>4040880</td>\n",
       "      <td>28086200</td>\n",
       "      <td>1664110000</td>\n",
       "      <td>955162000</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2649</th>\n",
       "      <td>2005-02-02</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.99</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.90</td>\n",
       "      <td>6.42</td>\n",
       "      <td>0.48</td>\n",
       "      <td>0.074766</td>\n",
       "      <td>0.032928</td>\n",
       "      <td>4659550</td>\n",
       "      <td>31345900</td>\n",
       "      <td>1701090000</td>\n",
       "      <td>976388000</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2650</th>\n",
       "      <td>2005-02-01</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.78</td>\n",
       "      <td>6.89</td>\n",
       "      <td>6.30</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.81</td>\n",
       "      <td>-0.39</td>\n",
       "      <td>-0.057269</td>\n",
       "      <td>0.027348</td>\n",
       "      <td>3869880</td>\n",
       "      <td>25333700</td>\n",
       "      <td>1582760000</td>\n",
       "      <td>908465000</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2651</th>\n",
       "      <td>2005-01-31</td>\n",
       "      <td>'000422</td>\n",
       "      <td>6.78</td>\n",
       "      <td>6.87</td>\n",
       "      <td>6.70</td>\n",
       "      <td>6.81</td>\n",
       "      <td>6.94</td>\n",
       "      <td>-0.13</td>\n",
       "      <td>-0.018732</td>\n",
       "      <td>0.018862</td>\n",
       "      <td>2669130</td>\n",
       "      <td>18135800</td>\n",
       "      <td>1678910000</td>\n",
       "      <td>963652000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2567 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date     Code  Open  High   Low  Close  Pre_Close  Change  \\\n",
       "0    2015-12-31  '000422  7.93  7.95  7.76   7.77       7.93   -0.16   \n",
       "1    2015-12-30  '000422  7.86  7.93  7.75   7.93       7.84    0.09   \n",
       "2    2015-12-29  '000422  7.72  7.85  7.69   7.84       7.71    0.13   \n",
       "3    2015-12-28  '000422  8.03  8.08  7.70   7.71       8.03   -0.32   \n",
       "4    2015-12-25  '000422  8.03  8.05  7.93   8.03       7.99    0.04   \n",
       "...         ...      ...   ...   ...   ...    ...        ...     ...   \n",
       "2647 2005-02-04  '000422  6.75  7.05  6.71   7.00       6.75    0.25   \n",
       "2648 2005-02-03  '000422  7.00  7.15  6.73   6.75       6.90   -0.15   \n",
       "2649 2005-02-02  '000422  6.42  6.99  6.42   6.90       6.42    0.48   \n",
       "2650 2005-02-01  '000422  6.78  6.89  6.30   6.42       6.81   -0.39   \n",
       "2651 2005-01-31  '000422  6.78  6.87  6.70   6.81       6.94   -0.13   \n",
       "\n",
       "       Chg_Pct  Turnover    Volume     Amount       Total      Circle  Row_Num  \n",
       "0    -0.020177  0.015498  13915200  109318000  6976420000  6976420000     2567  \n",
       "1     0.011480  0.018662  16755900  131567000  7120080000  7120080000     2566  \n",
       "2     0.016861  0.015886  14263800  110789000  7039280000  7039280000     2565  \n",
       "3    -0.039851  0.030821  27672800  218869000  6922550000  6922550000     2564  \n",
       "4     0.005006  0.021132  18974000  151673000  7209870000  7209870000     2563  \n",
       "...        ...       ...       ...        ...         ...         ...      ...  \n",
       "2647  0.037037  0.017178   2430800   16818500  1725750000   990538000        5  \n",
       "2648 -0.021739  0.028556   4040880   28086200  1664110000   955162000        4  \n",
       "2649  0.074766  0.032928   4659550   31345900  1701090000   976388000        3  \n",
       "2650 -0.057269  0.027348   3869880   25333700  1582760000   908465000        2  \n",
       "2651 -0.018732  0.018862   2669130   18135800  1678910000   963652000        1  \n",
       "\n",
       "[2567 rows x 15 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算数据: 分配行号。\n",
    "# ##################################################\n",
    "SourceDataPDF = StkPDF.copy()\n",
    "\n",
    "# 排序计算: rank 函数达到 SQL 中类似 ROW_NUMBER 的功能。\n",
    "# --------------------------------------------------\n",
    "TEMPPDF = SourceDataPDF\n",
    "# ..................................................\n",
    "Sorted = TEMPPDF.sort_values(\"Date\", ascending=True)\n",
    "# ..................................................\n",
    "TEMPPDF[\"Row_Num\"] = Sorted[\"Date\"].rank(ascending=True, method='first')\n",
    "# ..................................................\n",
    "TEMPPDF[\"Row_Num\"] = TEMPPDF[\"Row_Num\"].astype(\"int64\")\n",
    "# ..................................................\n",
    "StkNumberedPDF = TEMPPDF\n",
    "\n",
    "# ##################################################\n",
    "StkNumberedPDF"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "5cfad848",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Row_Num</th>\n",
       "      <th>Date</th>\n",
       "      <th>Close</th>\n",
       "      <th>EMA12</th>\n",
       "      <th>EMA26</th>\n",
       "      <th>MACD_DIF</th>\n",
       "      <th>MACD_DEA</th>\n",
       "      <th>MACD_STICK</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2651</th>\n",
       "      <td>1</td>\n",
       "      <td>2005-01-31</td>\n",
       "      <td>6.81</td>\n",
       "      <td>6.810000</td>\n",
       "      <td>6.810000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2650</th>\n",
       "      <td>2</td>\n",
       "      <td>2005-02-01</td>\n",
       "      <td>6.42</td>\n",
       "      <td>6.750000</td>\n",
       "      <td>6.781111</td>\n",
       "      <td>-0.031111</td>\n",
       "      <td>-0.006222</td>\n",
       "      <td>-0.049778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2649</th>\n",
       "      <td>3</td>\n",
       "      <td>2005-02-02</td>\n",
       "      <td>6.90</td>\n",
       "      <td>6.773077</td>\n",
       "      <td>6.789918</td>\n",
       "      <td>-0.016841</td>\n",
       "      <td>-0.008346</td>\n",
       "      <td>-0.016990</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2648</th>\n",
       "      <td>4</td>\n",
       "      <td>2005-02-03</td>\n",
       "      <td>6.75</td>\n",
       "      <td>6.769527</td>\n",
       "      <td>6.786961</td>\n",
       "      <td>-0.017434</td>\n",
       "      <td>-0.010164</td>\n",
       "      <td>-0.014541</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2647</th>\n",
       "      <td>5</td>\n",
       "      <td>2005-02-04</td>\n",
       "      <td>7.00</td>\n",
       "      <td>6.804984</td>\n",
       "      <td>6.802742</td>\n",
       "      <td>0.002243</td>\n",
       "      <td>-0.007682</td>\n",
       "      <td>0.019850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2563</td>\n",
       "      <td>2015-12-25</td>\n",
       "      <td>8.03</td>\n",
       "      <td>7.821564</td>\n",
       "      <td>7.700379</td>\n",
       "      <td>0.121185</td>\n",
       "      <td>0.101988</td>\n",
       "      <td>0.038394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2564</td>\n",
       "      <td>2015-12-28</td>\n",
       "      <td>7.71</td>\n",
       "      <td>7.804400</td>\n",
       "      <td>7.701091</td>\n",
       "      <td>0.103309</td>\n",
       "      <td>0.102252</td>\n",
       "      <td>0.002113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2565</td>\n",
       "      <td>2015-12-29</td>\n",
       "      <td>7.84</td>\n",
       "      <td>7.809877</td>\n",
       "      <td>7.711381</td>\n",
       "      <td>0.098496</td>\n",
       "      <td>0.101501</td>\n",
       "      <td>-0.006010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2566</td>\n",
       "      <td>2015-12-30</td>\n",
       "      <td>7.93</td>\n",
       "      <td>7.828357</td>\n",
       "      <td>7.727575</td>\n",
       "      <td>0.100783</td>\n",
       "      <td>0.101357</td>\n",
       "      <td>-0.001149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2567</td>\n",
       "      <td>2015-12-31</td>\n",
       "      <td>7.77</td>\n",
       "      <td>7.819379</td>\n",
       "      <td>7.730718</td>\n",
       "      <td>0.088662</td>\n",
       "      <td>0.098818</td>\n",
       "      <td>-0.020313</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2567 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Row_Num       Date  Close     EMA12     EMA26  MACD_DIF  MACD_DEA  \\\n",
       "2651        1 2005-01-31   6.81  6.810000  6.810000  0.000000  0.000000   \n",
       "2650        2 2005-02-01   6.42  6.750000  6.781111 -0.031111 -0.006222   \n",
       "2649        3 2005-02-02   6.90  6.773077  6.789918 -0.016841 -0.008346   \n",
       "2648        4 2005-02-03   6.75  6.769527  6.786961 -0.017434 -0.010164   \n",
       "2647        5 2005-02-04   7.00  6.804984  6.802742  0.002243 -0.007682   \n",
       "...       ...        ...    ...       ...       ...       ...       ...   \n",
       "4        2563 2015-12-25   8.03  7.821564  7.700379  0.121185  0.101988   \n",
       "3        2564 2015-12-28   7.71  7.804400  7.701091  0.103309  0.102252   \n",
       "2        2565 2015-12-29   7.84  7.809877  7.711381  0.098496  0.101501   \n",
       "1        2566 2015-12-30   7.93  7.828357  7.727575  0.100783  0.101357   \n",
       "0        2567 2015-12-31   7.77  7.819379  7.730718  0.088662  0.098818   \n",
       "\n",
       "      MACD_STICK  \n",
       "2651    0.000000  \n",
       "2650   -0.049778  \n",
       "2649   -0.016990  \n",
       "2648   -0.014541  \n",
       "2647    0.019850  \n",
       "...          ...  \n",
       "4       0.038394  \n",
       "3       0.002113  \n",
       "2      -0.006010  \n",
       "1      -0.001149  \n",
       "0      -0.020313  \n",
       "\n",
       "[2567 rows x 8 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算数据: 金融指标(MACD)。\n",
    "# ##################################################\n",
    "SourceDataPDF = StkNumberedPDF.sort_values(\"Date\", ascending=True)\n",
    "\n",
    "# 提取数据: 提取公历N年前数据。\n",
    "# --------------------------------------------------\n",
    "TEMPPDF = SourceDataPDF\n",
    "# ..................................................\n",
    "# DataFrame 中的 apply:\n",
    "# -> 当 axis=1 时，对每行执行指定函数。\n",
    "# -> 当 axis=0 时，对每列执行指定函数。\n",
    "TEMPPDF[\"EMA12\"] = TEMPPDF.apply(lambda X: MapFunc_FinInd_EMA(Index=X[\"Row_Num\"], Period=12, Close=X[\"Close\"]), axis=1)\n",
    "TEMPPDF[\"EMA26\"] = TEMPPDF.apply(lambda X: MapFunc_FinInd_EMA(Index=X[\"Row_Num\"], Period=26, Close=X[\"Close\"]), axis=1)\n",
    "# ..................................................\n",
    "TEMPPDF[\"MACD_DIF\"] = TEMPPDF.apply(lambda X: MapFunc_FinInd_MACD_DIF(EMA12=X[\"EMA12\"], EMA26=X[\"EMA26\"]), axis=1)\n",
    "TEMPPDF[\"MACD_DEA\"] = TEMPPDF.apply(lambda X: MapFunc_FinInd_MACD_DEA(Index=X[\"Row_Num\"], MACD_DIF=X[\"MACD_DIF\"]), axis=1)\n",
    "TEMPPDF[\"MACD_STICK\"] = TEMPPDF.apply(lambda X: MapFunc_FinInd_MACD_STICK(MACD_DIF=X[\"MACD_DIF\"], MACD_DEA=X[\"MACD_DEA\"]), axis=1)\n",
    "# ..................................................\n",
    "StkIndicatorPDF = TEMPPDF\n",
    "\n",
    "# ##################################################\n",
    "StkIndicatorPDF[[\"Row_Num\", \"Date\", \"Close\", \"EMA12\", \"EMA26\", \"MACD_DIF\", \"MACD_DEA\", \"MACD_STICK\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c5cc6264",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1536x864 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Matplotlib 绘制数据。\n",
    "# ##################################################\n",
    "DrawPDF = StkIndicatorPDF\n",
    "\n",
    "# 筛选数据: 放大局部数据。\n",
    "# --------------------------------------------------\n",
    "#DrawPDF = DrawPDF[(200 <= DrawPDF[\"Row_Num\"]) & (DrawPDF[\"Row_Num\"] <= 1500)]\n",
    "DrawPDF = DrawPDF[(500 <= DrawPDF[\"Row_Num\"]) & (DrawPDF[\"Row_Num\"] <= 750)]\n",
    "\n",
    "# 画布配置。\n",
    "# --------------------------------------------------\n",
    "fig = plt.figure(figsize=(16, 9), dpi=96)\n",
    "Grid = plt.GridSpec(4, 1, figure=fig)\n",
    "\n",
    "# K 线数据: 红绿 K 线的 Bottom、Height。\n",
    "# --------------------------------------------------\n",
    "KLine_Red = DrawPDF[DrawPDF[\"Change\"] >= 0.0]\n",
    "KLine_Red_Bottom = KLine_Red[\"Open\"]\n",
    "KLine_Red_Height = KLine_Red[\"Close\"] - KLine_Red[\"Open\"]\n",
    "# ..................................................\n",
    "KLine_Gre = DrawPDF[DrawPDF[\"Change\"] <  0.0]\n",
    "KLine_Gre_Bottom = KLine_Gre[\"Close\"]\n",
    "KLine_Gre_Height = KLine_Gre[\"Open\"] - KLine_Gre[\"Close\"]\n",
    "\n",
    "# 绘制数据: 绘制红绿 K 线。\n",
    "# --------------------------------------------------\n",
    "ax1 = plt.subplot(Grid[0:3])\n",
    "ax1.bar(x=KLine_Red[\"Row_Num\"], height=KLine_Red_Height, width=0.6, bottom=KLine_Red_Bottom, color=\"#FF4500\")\n",
    "ax1.bar(x=KLine_Gre[\"Row_Num\"], height=KLine_Gre_Height, width=0.6, bottom=KLine_Gre_Bottom, color=\"#228B22\")\n",
    "# ..................................................\n",
    "ax1.vlines(x=KLine_Red[\"Row_Num\"], ymin=KLine_Red[\"Low\"], ymax=KLine_Red[\"High\"], colors=\"#FF4500\", linewidth=1)\n",
    "ax1.vlines(x=KLine_Gre[\"Row_Num\"], ymin=KLine_Gre[\"Low\"], ymax=KLine_Gre[\"High\"], colors=\"#228B22\", linewidth=1)\n",
    "\n",
    "# MACD 数据: 红绿 MACD STICK。\n",
    "# --------------------------------------------------\n",
    "MACD_STICK_Red = DrawPDF[DrawPDF[\"MACD_STICK\"] >= 0.0]\n",
    "# ..................................................\n",
    "MACD_STICK_Gre = DrawPDF[DrawPDF[\"MACD_STICK\"] <  0.0]\n",
    "\n",
    "# 绘制数据: 绘制 Marker 标记点。\n",
    "# --------------------------------------------------\n",
    "ax2 = plt.subplot(Grid[3:4])\n",
    "ax2.bar(x=MACD_STICK_Red[\"Row_Num\"], height=MACD_STICK_Red[\"MACD_STICK\"], width=0.6, bottom=0, color=\"#FF4500\")\n",
    "ax2.bar(x=MACD_STICK_Gre[\"Row_Num\"], height=MACD_STICK_Gre[\"MACD_STICK\"], width=0.6, bottom=0, color=\"#228B22\")\n",
    "# ..................................................\n",
    "ax2.plot(DrawPDF[\"Row_Num\"], DrawPDF[\"MACD_DIF\"], color=\"#000000\", label=\"MACD_DIF\")\n",
    "ax2.plot(DrawPDF[\"Row_Num\"], DrawPDF[\"MACD_DEA\"], color=\"#FFA500\", label=\"MACD_DEA\")\n",
    "\n",
    "# ##################################################\n",
    "plt.legend(loc=\"upper left\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "595e5dad",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
